package dataStructure.linkedList.Recurrence;

/**
 * @Description: 排列问题
 * @Date: 2020/4/8
 * @Author: 许群星
 */
public class Rank {
    public static void main(String[] args) {
        String str="abcd";
        char[] chars=str.toCharArray();
        rank(chars,0,chars.length);
    }
    //数组，起始排列值，数组长度
    public static void rank(char[] t,int k,int n){
        if (k==n-1){
            for (int i = 0; i < n; i++) {
                System.out.print(t[i]);
            }
            System.out.println();
        }else {
            for (int i = k; i < n; i++) {
                //先交换，调用函数之后，在换回来
                char temp=t[i];t[i]=t[k];t[k]=temp;
                rank(t,k+1,n);
                temp=t[i];t[i]=t[k];t[k]=temp;
            }
        }
    }
}
/*
输入一个字符串，打印出该字符串中字符的所有排列。例如输入字符串abc，则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。

递归思想：
假如针对abc的排列，可以分成 (1)以a开头，加上bc的排列 (2)以b开头，加上ac的排列 (3)以c开头，加上ab的排列
————————————————
版权声明：本文为CSDN博主「乌枭」的原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/qq_34039315/java/article/details/78679029
 */